﻿using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kcadastro.classes;

namespace Kcadastro.os
{
    public partial class osEdit : System.Web.UI.Page
    {
        public string corTDvalarq;
        public string corTDqtdReg;
        public bool RetornoBtnContinuar = false;
        private bool arqok = false;
        private bool btnContinuarOK = false;

        protected void Page_Load(object sender, EventArgs e)
        {
            //TODO: BEGIN Seleciona Link Serviços
            if (this.Master is kcadastro)
            {
                ((kcadastro)this.Page.Master).SelecionaPagina(FW.utils.enumPaginas.NovaOS);
            }
            //TODO:END
            masterPageKcad m = Master as masterPageKcad;
            m.idFerr = 4;
            ltAlerta.Text = ConfigurationManager.AppSettings["vrPorcetagemAceite"];

            if (!seguranca.aplicSegur(4)) Response.Redirect("/na.aspx", true);

            //TODO: BEGIN SJC
            //DATA: 03/06/2012
            if (!seguranca.leuTermo())
            {
                Session.Add("VoltarOS", true);
                Response.Redirect("osTermo.aspx", true);
            }
            //END

            if (!IsPostBack)
            {
                if (Session["IDos"] != null)
                    if (Session["IDos"].ToString() != "")
                    {
                        tbi_idos.Text = Session["IDos"].ToString();

                        //TODO: BEGIN SJC DATA: 03/06/2012
                        //Alteração do nome do botão
                        if (!string.IsNullOrEmpty(Session["IDos"].ToString()))
                            bt_grvCabecalho.Text = "Salvar OS";


                        Session.Remove("IDos");
                    }

                if (tbi_idos.Text == "")
                {
                    cargaCombos();
                    //Response.Redirect("osList.aspx", true);
                    bt_agendarOS.Visible = false;
                    bt_execOS.Visible = false;
                    bt_recargarArq.Visible = true;
                    fu_original.Visible = true;
                    fu_original.Enabled = false;
                }
                else
                {
                    //cargaCombos();
                    carregar();
                }
                //if (Session["msg"] != null)
                //{
                //    lt_msg.Text = Session["msg"].ToString();
                //    Session.Remove("msg");
                //}
            }
        }

        private void cargaCombos()
        {
            hl_err.Visible = false;
            pn_top10.Visible = false;
            lbt_top10.Visible = false;
            bt_agendarOS.Enabled = true;
            bt_execOS.Visible = false;
            bt_grvCabecalho.Enabled = true;
            bt_recargarArq.Enabled = false;
            cbl_servicos.Enabled = true;
            tb_nome.Enabled = true;
            pn_arq1.Visible = true;
            pn_arq2.Visible = false;
            fu_original.Enabled = true;
            //TODO:BEGIN SJC - campo habilitado
            //if (tbi_idos.Text != "")
            //{
            //    dd_tpps.Enabled = false;
            //}
            //END
            oss os = new oss();

            List<tb_servico> lstServ = os.listaServicos(Convert.ToInt16(dd_tpps.SelectedValue));

            cbl_servicos.DataSource = lstServ;
            cbl_servicos.DataTextField = "nome";
            cbl_servicos.DataValueField = "PK_IDserv";
            cbl_servicos.DataBind();

            if (lstServ.Count > 0)
            {
                cbl_servicos.Items[0].Selected = true;
                cbl_servicos.Items[0].Enabled = false;
            }
            os = null;
        }

        private void carregar()
        {

            if (tbi_idos.Text != "")
            {
                tb_head.Text = "";
                oss o = new oss();
                tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
                tb_nome.Text = to.nomeOS.ToString();
                lt_datacriacao.Text = ((DateTime)to.dt_reg).ToString("dd/MM/yyyy");
                lt_agendadapara.Text = (to.dt_proxExec != null) ? ((DateTime)to.dt_proxExec).ToString("dd/MM/yyyy") : "não agendada";
                lt_msg_stts.Text = to.status;
                lt_qtdregs.Text = to.qtd_registros.ToString();
                lt_qtdproc.Text = to.qtd_processada.ToString();
                lt_arquivook.Text = (bool)to.arquivoOK ? "<font color=\"Olive\">Arquivo Válido</font>" : "<font color=\"black\">Arquivo Inválido</font>";
                dd_tpps.SelectedIndex = dd_tpps.Items.IndexOf(dd_tpps.Items.FindByValue(to.tpps.ToString()));

                cargaCombos();

                marcarServicos();

               
                    if ((bool)to.arquivoOK)
                    {
                        //lbt_top10.Visible = true;
                        corTDvalarq = "#FFFFFF";
                        hl_err.Visible = false;
                    }
                    //else
                    //{
                    //    if (!IsPostBack)
                    //    {
                    //        corTDvalarq = "#FF0000";
                    //        hl_err.Visible = true;
                    //        hl_err.NavigateUrl = "~/visualizar.aspx?tp=ERR&i=" + tbi_idos.Text;
                    //    }
                    //}
                    
                

                if ((int)to.qtd_registros > 0)
                {
                    corTDqtdReg = "#FFFFFF";
                    bt_grvCabecalho.Enabled = false;
                    dd_tpps.Enabled = false;
                   
                }
                else
                {
                    corTDqtdReg = "#FF0000";
                    bt_grvCabecalho.Enabled = true;
                    dd_tpps.Enabled = true;
                  
                }


                if ((bool)to.arquivoOK)
                {
                    lbt_top10.Visible = true;

                }

                if (to.stts == 1 && (bool)to.arquivoOK && ((int)to.qtd_registros > 0))
                {
                    bt_agendarOS.Enabled = true;
                }

                if (to.stts == 2)
                {
                    orcarOS();
                }

                pn_top10.Visible = false;
                bt_agendarOS.Enabled = false;
                bt_execOS.Visible = false;
                bt_grvCabecalho.Enabled = false;
                bt_recargarArq.Enabled = false;
                cbl_servicos.Enabled = false;
                tb_nome.Enabled = false;
                pn_arq1.Visible = true;
                pn_arq2.Visible = false;

                switch (to.stts)
                {
                    case 1:
                        if ((bool)to.arquivoOK && ((int)to.qtd_registros > 0))
                        {
                            bt_agendarOS.Enabled = true;
                            bt_grvCabecalho.Enabled = true;
                        }
                        else
                        {
                            if (btnContinuarOK)
                            {
                                bt_agendarOS.Enabled = true;
                                bt_grvCabecalho.Enabled = true;
                            }
                            else
                            {
                                bt_agendarOS.Visible = false;
                                bt_execOS.Visible = false;
                                bt_grvCabecalho.Enabled = true;
                            }
                        }

                        bt_recargarArq.Visible = true;
                        bt_recargarArq.Enabled = true;
                        cbl_servicos.Enabled = true;
                        tb_nome.Enabled = true;
                        break;
                    case 2:
                        bt_execOS.Visible = true;
                        break;
                    case 3:
                    case 4:
                    case 5:
                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        pn_autorizacoes.Visible = false;
                        bt_agendarOS.Visible = false;
                        bt_execOS.Visible = false;
                        bt_grvCabecalho.Visible = false;
                        bt_recargarArq.Visible = false;
                        pn_arq1.Visible = true;
                        pn_arq2.Visible = false;
                        fu_original.Visible = false;
                        break;
                    case 10:
                    case 11:
                        pn_autorizacoes.Visible = false;
                        bt_agendarOS.Visible = false;
                        bt_execOS.Visible = false;
                        bt_grvCabecalho.Visible = false;

                        pn_arq1.Visible = false;
                        pn_arq2.Visible = true;
                        hl_comprovantes.NavigateUrl = "~/visualizar.aspx?tp=CMP&i=" + tbi_idos.Text.ToString();
                        hl_resultado.NavigateUrl = "~/visualizar.aspx?tp=RET&i=" + tbi_idos.Text.ToString();
                        break;
                    default:
                        bt_execOS.Visible = true;
                        bt_execOS.Enabled = false;
                        break;
                }

                o = null;
                to = null;
            }
            else
            { bt_agendarOS.Enabled = false; }
        }

        private void marcarServicos()
        {
            if (tbi_idos.Text != "")
            {
                oss os = new oss();

                List<tb_osXserv> ls = os.lerServicos(Convert.ToInt64(tbi_idos.Text));

                foreach (tb_osXserv ss in ls)
                {
                    for (int i = 0; i < this.cbl_servicos.Items.Count; i++)
                    {
                        if (cbl_servicos.Items[i].Value.ToString() == ss.FK_IDserv.ToString())
                        {
                            cbl_servicos.Items[i].Selected = true;
                        }
                        //if (to.stts >= 2)
                        //{
                        //    cbl_servicos.Items[i].Enabled = false;
                        //}
                    }
                }
                os = null;
            }
        }

        protected void dd_tpps_SelectedIndexChanged(object sender, EventArgs e)
        {
            //TODO:BEGIN SJC - 28/06/2012  
            //cargaCombos();
        }

        private void gravarServicos(int _qtdreg)
        {
            if (tbi_idos.Text != "")
            {
                List<int> valores = new List<int>();
                for (int i = 0; i < this.cbl_servicos.Items.Count; i++)
                {
                    if (cbl_servicos.Items[i].Selected)
                    {
                        valores.Add(Convert.ToInt16(cbl_servicos.Items[i].Value));
                    }
                }
                oss o = new oss();
                o.gravarServicos(Convert.ToInt64(tbi_idos.Text), valores.ToArray(), _qtdreg);
                o = null;
            }
        }

        private void gravarDadosOS()
        {
            oss o = new oss();

            if (tbi_idos.Text == "")
            {
                tb_o to = new tb_o();
                to.nomeOS = tb_nome.Text;
                to.FK_IDuser = Convert.ToInt16(Session["IDuser"].ToString());
                to.arquivoOK = false;
                to.caminhoFinal = "";
                to.caminhoOriginal = "";
                to.dt_reg = DateTime.Now;
                to.FK_IDemp = Convert.ToInt16(Session["IDemp"].ToString());
                to.orcamentoOK = false;
                to.pagaOK = false;
                to.processando = false;
                to.qtd_processada = 0;
                to.qtd_registros = 0;
                to.status = "em configuração pelo usuário";
                to.stts = 1;
                to.terminoOK = false;
                to.valorOrcamento = (decimal)0;
                to.tpps = Convert.ToInt16(dd_tpps.SelectedValue);
                to.multipart = false;

                int idos = o.abrirOS(to);

                tbi_idos.Text = idos.ToString();
                to = null;
                gravarServicos(0);
            }
            else
            {
                tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
                to.nomeOS = tb_nome.Text;
                //TODO:BEGIN SJC - alterar tipo de serviço
                to.tpps = Convert.ToInt32(dd_tpps.SelectedValue);
                o.uptNome(to);
                gravarServicos((int)to.qtd_registros);


                to = null;
            }

            o = null;

        }

        protected void bt_grvCabecalho_Click(object sender, EventArgs e)
        {
            lt_upl_msg.Text = "";
            lt_jmsg.Text = "";
            gravarDadosOS();
            carregar();
        }

        protected void bt_recargarArq_Click(object sender, EventArgs e)
        {
            uploadArquivo();
            carregar();
            bt_agendarOS.Visible = true;
        }

        private void uploadArquivo(bool arqEnviarNovamente = false)
        {
            lt_upl_msg.Text = "";
            lt_jmsg.Text = "";
            string path = ConfigurationManager.AppSettings["arqPath"].ToString() + Session["IDemp"].ToString() + "/" + tbi_idos.Text.ToString() + "/original.txt";
            oss o = new oss();
            if (!arqEnviarNovamente)
            {
                if (fu_original.HasFile)
                {
                    if (fu_original.FileName.Substring(fu_original.FileName.Length - 3, 3).ToUpper() == "CSV")
                    {
                        fu_original.SaveAs(path);
                        o.updateArqOriginal(Convert.ToInt64(tbi_idos.Text), path);

                        validarArquivo();

                    }
                    else
                    {
                        lt_upl_msg.Text = "<font color=\"RED\">Arquivo deve ser do tipo CSV</font>";
                        lt_jmsg.Text = string.Format("<script language=\"javascript\">alerta(\"{0}\")</script>", "Arquivo deve ser do tipo CSV");
                    }
                }
                else
                {
                    lt_upl_msg.Text = "<font color=\"RED\">É necessário escolher um arquivo CSV para Regarregar.</font>";
                    lt_jmsg.Text = string.Format("<script language=\"javascript\">alerta(\"{0}\")</script>", "É necessário escolher um arquivo CSV para Regarregar.");
                }
            }
            else {
                validarArquivo();
            }
            o = null;
        }

        private void validarArquivo(bool arqEnviarNovamente = false)
        {
            if (!arqEnviarNovamente)
            {
                divMostrarExecute.Visible = false;
                pn_autorizacoes.Visible = !divMostrarExecute.Visible;
                divRestante.Visible = !divMostrarExecute.Visible;
                oss o = new oss();
                tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
                importTXT itxt = new importTXT();
                itxt.validarArquivo(to.caminhoOriginal, dd_tpps.SelectedValue.ToString());
                arqok = itxt.PROPRIEDADESARQUIVO.HEADERVALIDO & itxt.PROPRIEDADESARQUIVO.CORPOVALIDO;
                lt_arquivook.Text = arqok ? "<font color=\"Olive\">Arquivo Válido</font>" : "<font color=\"red\">Arquivo Inválido</font>";
                //lt_msgarquivo.Text = itxt.MSG.Replace("\n", "<br />");
                o.gravarReportErros(itxt.MSG.Replace("\n", "\r\n"), tbi_idos.Text.ToString(), Session["IDemp"].ToString());
                to.qtd_registros = itxt.PROPRIEDADESARQUIVO.QTDREGISTROS - 1;
                to.arquivoOK = itxt.PROPRIEDADESARQUIVO.HEADERVALIDO & itxt.PROPRIEDADESARQUIVO.CORPOVALIDO;
                if (arqok)
                {
                    o.updateOS(to);
                    if (!((bool)to.arquivoOK)) lt_jmsg.Text = string.Format("<script language=\"javascript\">alerta(\"{0}\")</script>", "Arquivo inválido, clique no link Erros Arquivo para relatório completo.");

                    to = null;
                    o = null;
                    gravarServicos(itxt.PROPRIEDADESARQUIVO.QTDREGISTROS - 1);
                }
                else {
                    divMostrarExecute.Visible = true;
                    pn_autorizacoes.Visible = !divMostrarExecute.Visible;
                    divRestante.Visible = !divMostrarExecute.Visible;

                    bt_recargarArq.Enabled = false;
                }

                if (RetornoBtnContinuar)
                {
                    to.arquivoOK = true;
                    o.updateOS(to);
                    lt_arquivook.Text = arqok ? "<font color=\"Olive\">Arquivo Válido</font>" : "<font color=\"red\">Arquivo Válido, com ERROS</font>";

                    to = null;
                    o = null;
                    gravarServicos(itxt.PROPRIEDADESARQUIVO.QTDREGISTROS - 1);
                }
            }
            else {
                oss o = new oss();
                tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
                importTXT itxt = new importTXT();
                itxt.validarArquivo(to.caminhoOriginal, dd_tpps.SelectedValue.ToString());
                bool arqok = itxt.PROPRIEDADESARQUIVO.HEADERVALIDO & itxt.PROPRIEDADESARQUIVO.CORPOVALIDO;
                lt_arquivook.Text = arqok ? "<font color=\"Olive\">Arquivo Válido</font>" : "<font color=\"red\">Arquivo Inválido</font>";
                //lt_msgarquivo.Text = itxt.MSG.Replace("\n", "<br />");
                o.gravarReportErros(itxt.MSG.Replace("\n", "\r\n"), tbi_idos.Text.ToString(), Session["IDemp"].ToString());
                to.qtd_registros = itxt.PROPRIEDADESARQUIVO.QTDREGISTROS - 1;
                to.arquivoOK = itxt.PROPRIEDADESARQUIVO.HEADERVALIDO & itxt.PROPRIEDADESARQUIVO.CORPOVALIDO;
                divMostrarExecute.Visible = false;
                pn_autorizacoes.Visible = !divMostrarExecute.Visible;
                divRestante.Visible = !divMostrarExecute.Visible;
                o.updateOS(to);
                if (!((bool)to.arquivoOK)) lt_jmsg.Text = string.Format("<script language=\"javascript\">alerta(\"{0}\")</script>", "Arquivo inválido, clique no link Erros Arquivo para relatório completo.");

                to = null;
                o = null;
                gravarServicos(itxt.PROPRIEDADESARQUIVO.QTDREGISTROS - 1);
            }
        }

        private void orcarOS()
        {
            lt_upl_msg.Text = "";
            lt_jmsg.Text = "";
            empresas emp = new empresas();
            oss os = new oss();
            tb_o to = os.lerOs(Convert.ToInt64(tbi_idos.Text));
            if (to.stts == 2)
            {
                emp.regraNegocio(Convert.ToInt16(Session["IDemp"].ToString()), (int)to.qtd_registros);
                os.orcamento(Convert.ToInt64(tbi_idos.Text));
                List<v_orcamento> go = os.listaOrcamento(Convert.ToInt64(tbi_idos.Text));
                gv_orca.DataSource = go;
                gv_orca.DataBind();
                lt_totalorca.Text = String.Format("{0:C}", go.Sum(t => t.orcamento));
                to.stts = 2;
                to.status = "Aguardando cliente iniciar execução";
                os.updateOS(to);
                lt_regctto.Text = emp.QTDCTTO.ToString();
                lt_regsttopre.Text = emp.QTDCTTO.ToString();
                lt_regsos.Text = to.qtd_registros.ToString();
                lt_regsospre.Text = to.qtd_registros.ToString();
                lt_regcons.Text = emp.QTDMES.ToString();
                lt_regconspre.Text = emp.QTDMES.ToString();
            }
            pn_ctto1.Visible = false;
            pn_ctto2.Visible = false;
            pn_ctto3.Visible = false;

            switch (emp.TPCTTO)
            {
                case 1:
                    pn_ctto1.Visible = true;
                    break;
                case 2:
                    pn_ctto2.Visible = true;
                    break;
                case 3:
                    pn_ctto3.Visible = true;
                    break;

            }


        }

        protected void bt_agendarOS_Click(object sender, EventArgs e)
        {
            lt_upl_msg.Text = "";
            lt_jmsg.Text = "";
            empresas emp = new empresas();
            oss os = new oss();
            tb_o to = os.lerOs(Convert.ToInt64(tbi_idos.Text));
            gravarServicos((int)to.qtd_registros);
            if ((bool)to.arquivoOK && ((int)to.qtd_registros > 0))
            {
                if (emp.regraNegocio(Convert.ToInt16(Session["IDemp"].ToString()), (int)to.qtd_registros))
                {
                    os.orcamento(Convert.ToInt64(tbi_idos.Text));
                    List<v_orcamento> go = os.listaOrcamento(Convert.ToInt64(tbi_idos.Text));
                    gv_orca.DataSource = go;
                    gv_orca.DataBind();
                    lt_totalorca.Text = String.Format("{0:C}", go.Sum(t => t.orcamento));
                    to.stts = 2;
                    to.status = "Aguardando cliente iniciar execução";
                    os.updateOS(to);
                }
                else
                {
                    lt_msgarquivo.Text = emp.MSG;
                }
            }
            else
            {
                lt_msgarquivo.Text = "Verifique se todas as condições em vermelho estão satisfeitas.";
            }
            carregar();
            
        }

        protected void bt_execOS_Click(object sender, EventArgs e)
        {
            lt_upl_msg.Text = "";
            lt_jmsg.Text = "";
            oss os = new oss();
            tb_o to = os.lerOs(Convert.ToInt64(tbi_idos.Text));
            if ((bool)to.arquivoOK && ((int)to.qtd_registros > 0) && to.stts == 2)
            {
                to.stts = 3;
                to.status = "Execução agendada";
                //to.dt_proxExec = DateTime.Now.AddHours(1);
                to.dt_proxExec = DateTime.Now.AddMinutes(30);
                os.updateOS(to);
            }
            carregar();
            bt_agendarOS.Enabled = true;
        }

        protected void lbt_top10_Click(object sender, EventArgs e)
        {
            lt_upl_msg.Text = "";
            lt_jmsg.Text = "";
            carregar();
            tb_head.Text = "";
            pn_top10.Visible = true;
            oss o = new oss();
            tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
            List<string> hh = o.headArquivo(to.PK_IDos, to.caminhoOriginal).ToList<string>();
            foreach (string s in hh)
            {
                tb_head.Text += s + "\n";
            }
        }

        protected void btnContinuar__Click(object sender, EventArgs e)
        {
            RetornoBtnContinuar = true;
            btnContinuarOK = true;
            carregar();
            uploadArquivo(true);            
            divMostrarExecute.Visible = false;
            pn_autorizacoes.Visible = !divMostrarExecute.Visible;
            divRestante.Visible = !divMostrarExecute.Visible;
            bt_recargarArq.Enabled = true;
            lbt_top10.Visible = true;
            bt_agendarOS.Visible = true;
        }

        protected void btnCancelar__Click(object sender, EventArgs e)
        {
            divMostrarExecute.Visible = false;
            pn_autorizacoes.Visible = !divMostrarExecute.Visible;
            divRestante.Visible = !divMostrarExecute.Visible;
            bt_recargarArq.Enabled = true;

            hl_err.Visible = true;
            corTDvalarq = "#FF0000";
            hl_err.Visible = true;
            hl_err.NavigateUrl = "~/visualizar.aspx?tp=ERR&i=" + tbi_idos.Text;
            bt_agendarOS.Visible = false;
        }
    }
}